package SourceCode.FunctionInterface.code;

import java.util.Objects;
import java.util.function.BiPredicate;

/**
 * @Description 接受两个参数，并返回判断结果
 * @Author bloodcolding
 * @Date 2021/01/23 5:36 PM
 */
public class ImpBiPredicate<T, U> implements BiPredicate<T, U> {
    /**
     * 接受两个参数，并返回判断结果
     *
     * @param t
     * @param u
     * @return
     */
    @Override
    public boolean test(T t, U u) {
        return false;
    }

    /**
     * and
     *
     * @param other
     * @return
     */
    @Override
    public BiPredicate<T, U> and(BiPredicate<? super T, ? super U> other) {
        Objects.requireNonNull(other);
        return (T t, U u) -> test(t, u) && other.test(t, u);
    }

    /**
     * 非
     *
     * @return
     */
    @Override
    public BiPredicate<T, U> negate() {
        return (T t, U u) -> !test(t, u);
    }

    /**
     * or
     *
     * @param other
     * @return
     */
    @Override
    public BiPredicate<T, U> or(BiPredicate<? super T, ? super U> other) {
        Objects.requireNonNull(other);
        return (T t, U u) -> test(t, u) || other.test(t, u);
    }
}
